package Text10;

import java.util.*;

public class Main {
//    给定一颗树，树中包含 n个结点（编号 1∼n）和 n−1条无向边。
//    输入格式第一行包含整数 n，表示树的结点数。
//    接下来 n−1行，每行包含两个整数 a和 b，表示点 a
//    和点 b之间存在一条边。

    public static int N = 100010, M = N * 2, n, idx;
    public static int[] h = new int[N];
    public static int[] e = new int[M];
    public static int[] ne = new int[M];
    public static boolean[] st = new boolean[N];
    public static int ans = N; //一开始将最大值赋值成N,最大了

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        Arrays.fill(h, -1);
        for (int i = 0; i < n - 1; i++) {
            int a = in.nextInt();
            int b = in.nextInt();
            add(a, b);
            add(b, a);
        }
        dfs(1);
        System.out.println(ans);
    }

    private static int dfs(int u) {
        st[u] = true;
        int sum = 1, res = 0;
        for (int i = h[u]; i != -1; i = ne[i]) {
            int j = e[i];
            if (!st[j]) {
                int tmp = dfs(j);
                sum += tmp;
                res = Math.max(tmp, res);
            }
        }
        res = Math.max(res, n - sum);
        ans = Math.min(ans, res);
        return sum;
    }

    private static void add(int a, int b) {
        e[idx] = b;
        ne[idx] = h[a];
        h[a] = idx++;
    }


}
